#pragma once

#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<assert.h>
#include<errno.h>

#define SIZE 1024
#define SYNC_NOW  1//立即刷新
#define SYNC_LINE 2//行缓冲
#define SYNC_FULL 4//全缓冲

typedef struct _FILE
{
    int _flags;//刷新方式
    int _fileno;//文件描述符
    int _cap;//buffer的总容量
    int _size;//buffer的使用量
    char _buffer[SIZE];//缓冲区
}FILE_; 

FILE_* fopen_(const char* path,const char* mode);
int fwrite_(const void* ptr,int num,FILE_* fp);
void fclose_(FILE_* fp);
void fflush_(FILE_* fp);

////////////////////////////////////////////////

//FILE并不是直接把数据写进log.txt
//而是先写进log.txt对应的struct file结构体中
//这个结构体又有一个内核缓冲区，这是由OS自主决定的刷新策略(这就没那么简单了)
//比如说OS内存不足了就赶快把数据刷新出去。
//写到外设中跟用户没关系！！